# 导包（将对口对象层（api）封装的接口类导入进来）
from api.login import LoginAPI
# 创建测试类
class TestLoginAPI:
    uid = None
    # 前置处理
    def setup_method(self):
        # 前置处理里面做的第一件事，就是把第一步导入进来的接口类实例化为一个对象
        self.login_api = LoginAPI()
        # 前置处理里面做的第二件事，如果下面的测试用例方法需要使用动态值的话，把动态值提取出来
        # 将验证码接口产生的uuid提取出来
        resp = self.login_api.get_verify_code() #拿到验证码接口的完整响应
        TestLoginAPI.uid = resp.json().get("uuid")#拿到了uuid字段的值
    # 后置处理
    def teardown_method(self):
        pass
    # 编写测试用例方法
    # 登录成功
    def test01_success(self):
        login_data = {
            "username":"admin",
            "password":"HM_2023_test",
            "code":"2",
            "uuid":TestLoginAPI.uid}

        resp = self.login_api.login(test_data=login_data)
        # 编写断言判断响应结果是否符合预期
        # 断言状态码是否为200
        assert 200 == resp.status_code
        # 断言code值是否为200
        assert 200 == resp.json().get("code")
        # 断言“成功”是否在响应文本中
        assert '成功' in resp.text

    # 登录失败（用户名为空）
    def test02_without_username(self):
        login_data = {
            "username": "",
            "password": "HM_2023_test",
            "code": "2",
            "uuid": TestLoginAPI.uid}

        resp = self.login_api.login(test_data=login_data)
        # 编写断言判断响应结果是否符合预期
        # 断言状态码是否为200
        assert 200 == resp.status_code
        # 断言code值是否为500
        assert 500 == resp.json().get("code")
        # 断言“错误”是否在响应文本中
        assert '错误' in resp.text
    # 登录失败（未注册用户名）
    def test03_username_not_exist(self):
        login_data = {
            "username": "admin01",
            "password": "HM_2023_test",
            "code": "2",
            "uuid": TestLoginAPI.uid}

        resp = self.login_api.login(test_data=login_data)
        # 编写断言判断响应结果是否符合预期
        # 断言状态码是否为200
        assert 200 == resp.status_code
        # 断言code值是否为500
        assert 500 == resp.json().get("code")
        # 断言“错误”是否在响应文本中
        assert '错误' in resp.text